From 5e966951585844aced56655d63120d920316f8ac Mon Sep 17 00:00:00 2001 From: "kaf24@freefall.cl.cam.ac.uk" Date: Wed, 27 Oct 2004 14:26:56 +0000 Subject: [PATCH] bitkeeper revision 1.1159.1.289 (417fb030yj7vBz8Pvd4b0uvFxr0PzQ) Ensure we use 64-bit arithmetic when converting a possibly-large microseconds value into a nanoseconds value (e.g., when calculating current system time in the timer interrupt handler). --- linux-2.4.27-xen-sparse/arch/xen/kernel/time.c | 2 +- linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c index 9ff844d70e..3a4f8bf2c5 100644 --- a/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c +++ b/linux-2.4.27-xen-sparse/arch/xen/kernel/time.c @@ -397,7 +397,7 @@ static inline void do_timer_interrupt(int irq, void *dev_id, __get_time_values_from_xen(); delta = (s64)(shadow_system_time + - (__get_time_delta_usecs() * 1000) - + ((s64)__get_time_delta_usecs() * 1000LL) - processed_system_time); } while ( !TIME_VALUES_UP_TO_DATE ); diff --git a/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c b/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c index 15bc102ce6..d924f7a8e5 100644 --- a/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c +++ b/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/time.c @@ -273,7 +273,8 @@ int do_settimeofday(struct timespec *tv) * be stale, so we can retry with fresh ones. */ again: - nsec = tv->tv_nsec - cur_timer->get_offset() * NSEC_PER_USEC; + nsec = (s64)tv->tv_nsec - + ((s64)cur_timer->get_offset() * (s64)NSEC_PER_USEC); if (unlikely(!TIME_VALUES_UP_TO_DATE)) { __get_time_values_from_xen(); goto again; @@ -383,15 +384,16 @@ static inline void do_timer_interrupt(int irq, void *dev_id, __get_time_values_from_xen(); delta = (s64)(shadow_system_time + - (cur_timer->get_offset() * NSEC_PER_USEC) - + ((s64)cur_timer->get_offset() * + (s64)NSEC_PER_USEC) - processed_system_time); } while (!TIME_VALUES_UP_TO_DATE); if (unlikely(delta < 0)) { - printk("Timer ISR: Time went backwards: %lld %lld %ld %lld\n", + printk("Timer ISR: Time went backwards: %lld %lld %lld %lld\n", delta, shadow_system_time, - (cur_timer->get_offset() * NSEC_PER_USEC), + ((s64)cur_timer->get_offset() * (s64)NSEC_PER_USEC), processed_system_time); return; } -- 2.30.2